An essential aspect of an operating system, such as Unix or Linux, is the management and support of processes and threads. These operating systems can have a large number of active processes and many threads for each process, which can lead to a very large number of open files attached to those processes or threads. In some cases, 30,000 to a million files could be open for a process. Managing the open files requires allocating and maintaining file descriptors for each of the open files.
Operating system performance demands that there be an efficient way to generate a large number of file descriptors and an efficient way to find a file descriptor. One solution is to allocate at boot time a static list of file descriptors, where the list has the maximum number of file descriptors ever needed by each process or its threads after the operating system is running. While such a system might support fast lookups, it would require a very large amount of dedicated memory and thus is not feasible.